#ifndef __VIMOCK_MOCK_MANAGER_STATE__
#define __VIMOCK_MOCK_MANAGER_STATE__

#include <memory>
#include "invocation.hpp"
#include "object.hpp"
#include "exception_thrower.hpp"

namespace vimock {
class _mock_manager_state;
typedef std::tr1::shared_ptr<_mock_manager_state> mock_manager_state;
class _mock_manager_state {
public:
	virtual object invoked(invocation inv) = 0;
	virtual void record_value_to_return(object value_to_return) = 0;
	virtual void record_exception_to_throw(exception_thrower ex_to_throw) = 0;
	virtual mock_manager_state replay() = 0;
	virtual void verify() = 0;
};
}

#endif //__VIMOCK_MOCK_MANAGER_STATE__ 
